package com.zzedu.framework.lock;

import org.redisson.api.RLock;

import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;

/**
 * 分布式锁
 *
 * @author wyf
 */
public interface IDistributedLockService {
    /**
     * @param lockName 锁名称
     * @param waitTime 等待时间
     * @param lockTime 锁有效期
     * @param timeUnit 时间单位
     * @return RLock 所对象
     */
    public RLock getLock(String lockName, Long waitTime, Long lockTime, TimeUnit timeUnit);


    /**
     * 执行带锁业务操作
     *
     * @param lockName 锁名称
     * @param waitTime 等待时间
     * @param lockTime 锁有效期
     * @param timeUnit 时间单位
     * @return <T> T 业务执行结果
     */
    public <T> T executeWithLock(String lockName, Long waitTime, Long lockTime, TimeUnit timeUnit, Supplier<T> supplier);
}